{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7.8.3 GAM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import statsmodels.api as sm\n",
    "import statsmodels.formula.api as smf\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from patsy import dmatrix\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(3000, 13)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>year</th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>maritl</th>\n",
       "      <th>race</th>\n",
       "      <th>education</th>\n",
       "      <th>region</th>\n",
       "      <th>jobclass</th>\n",
       "      <th>health</th>\n",
       "      <th>health_ins</th>\n",
       "      <th>logwage</th>\n",
       "      <th>wage</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>231655</td>\n",
       "      <td>2006</td>\n",
       "      <td>18</td>\n",
       "      <td>1. Male</td>\n",
       "      <td>1. Never Married</td>\n",
       "      <td>1. White</td>\n",
       "      <td>1. &lt; HS Grad</td>\n",
       "      <td>2. Middle Atlantic</td>\n",
       "      <td>1. Industrial</td>\n",
       "      <td>1. &lt;=Good</td>\n",
       "      <td>2. No</td>\n",
       "      <td>4.318063</td>\n",
       "      <td>75.043154</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>86582</td>\n",
       "      <td>2004</td>\n",
       "      <td>24</td>\n",
       "      <td>1. Male</td>\n",
       "      <td>1. Never Married</td>\n",
       "      <td>1. White</td>\n",
       "      <td>4. College Grad</td>\n",
       "      <td>2. Middle Atlantic</td>\n",
       "      <td>2. Information</td>\n",
       "      <td>2. &gt;=Very Good</td>\n",
       "      <td>2. No</td>\n",
       "      <td>4.255273</td>\n",
       "      <td>70.476020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>161300</td>\n",
       "      <td>2003</td>\n",
       "      <td>45</td>\n",
       "      <td>1. Male</td>\n",
       "      <td>2. Married</td>\n",
       "      <td>1. White</td>\n",
       "      <td>3. Some College</td>\n",
       "      <td>2. Middle Atlantic</td>\n",
       "      <td>1. Industrial</td>\n",
       "      <td>1. &lt;=Good</td>\n",
       "      <td>1. Yes</td>\n",
       "      <td>4.875061</td>\n",
       "      <td>130.982177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>155159</td>\n",
       "      <td>2003</td>\n",
       "      <td>43</td>\n",
       "      <td>1. Male</td>\n",
       "      <td>2. Married</td>\n",
       "      <td>3. Asian</td>\n",
       "      <td>4. College Grad</td>\n",
       "      <td>2. Middle Atlantic</td>\n",
       "      <td>2. Information</td>\n",
       "      <td>2. &gt;=Very Good</td>\n",
       "      <td>1. Yes</td>\n",
       "      <td>5.041393</td>\n",
       "      <td>154.685293</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11443</td>\n",
       "      <td>2005</td>\n",
       "      <td>50</td>\n",
       "      <td>1. Male</td>\n",
       "      <td>4. Divorced</td>\n",
       "      <td>1. White</td>\n",
       "      <td>2. HS Grad</td>\n",
       "      <td>2. Middle Atlantic</td>\n",
       "      <td>2. Information</td>\n",
       "      <td>1. &lt;=Good</td>\n",
       "      <td>1. Yes</td>\n",
       "      <td>4.318063</td>\n",
       "      <td>75.043154</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  year  age      sex            maritl      race  \\\n",
       "0      231655  2006   18  1. Male  1. Never Married  1. White   \n",
       "1       86582  2004   24  1. Male  1. Never Married  1. White   \n",
       "2      161300  2003   45  1. Male        2. Married  1. White   \n",
       "3      155159  2003   43  1. Male        2. Married  3. Asian   \n",
       "4       11443  2005   50  1. Male       4. Divorced  1. White   \n",
       "\n",
       "         education              region        jobclass          health  \\\n",
       "0     1. < HS Grad  2. Middle Atlantic   1. Industrial       1. <=Good   \n",
       "1  4. College Grad  2. Middle Atlantic  2. Information  2. >=Very Good   \n",
       "2  3. Some College  2. Middle Atlantic   1. Industrial       1. <=Good   \n",
       "3  4. College Grad  2. Middle Atlantic  2. Information  2. >=Very Good   \n",
       "4       2. HS Grad  2. Middle Atlantic  2. Information       1. <=Good   \n",
       "\n",
       "  health_ins   logwage        wage  \n",
       "0      2. No  4.318063   75.043154  \n",
       "1      2. No  4.255273   70.476020  \n",
       "2     1. Yes  4.875061  130.982177  \n",
       "3     1. Yes  5.041393  154.685293  \n",
       "4     1. Yes  4.318063   75.043154  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(r'E:\\programming\\dataset\\Into_to_statstical_learning\\Wage.csv')\n",
    "print(data.shape)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int64\n",
      "[1 4 3 2 5]\n"
     ]
    }
   ],
   "source": [
    "# the first col dones't seem to be that relevant\n",
    "data = data.iloc[:,1:]\n",
    "\n",
    "# encoding eduation column\n",
    "data['education'].unique()\n",
    "# we can see it has some numbers, so, lets use that for encoding\n",
    "\n",
    "data['education'] = data['education'].map(lambda x: int(x[0]))\n",
    "print(data['education'].dtype)\n",
    "print(data['education'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# \"GAM is just a big linear regression model using an appropriate choice of basis functions\" - taken from book\n",
    "# so, for generative additive models, we create a matrix from patsy.dmatrix, which will be a combination of several functions, \n",
    "# like cubic splines, natural spline. etc, hence it has additive models in its name\n",
    "# we are cuurently working on this line in the book - > gam1=lm(wage∼ns(year ,4)+ns(age ,5)+education ,data=Wage)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_transformed = dmatrix('cr(year,df = 4) + cr(age,df=5) + education', data = {'year':data['year'],'age':data['age'],\n",
    "                                                                              'education':data['education']} ,\n",
    "                                                                            return_type = 'dataframe')\n",
    "# fit the model\n",
    "model_gam = sm.OLS(data['wage'],X_transformed).fit()\n",
    "preds = model_gam.predict(X_transformed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "fig (7.12) in text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'f1(year)')"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(data['year'],preds)\n",
    "plt.xlabel('Year')\n",
    "plt.ylabel('f1(year)')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'f1(year)')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.lineplot(data['age'],preds)\n",
    "plt.xlabel('age')\n",
    "plt.ylabel('f1(year)')\n",
    "# as it can be seen the figure is not similar as in the text, that;s because here it is not a smooth spline as it was in the \n",
    "# book."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Wage')"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.boxplot(data['education'],preds)\n",
    "plt.ylabel('Wage')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using ANNOVA \n",
    "### We will use annova test to decide which of the following three functions is best to use.  \n",
    "- model 1 - GAM that excludes year \n",
    "- model 2 - GAM that uses a linear function of linear \n",
    "- model 3 - GAM that uses a spline of year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   df_resid           ssr  df_diff       ss_diff          F    Pr(>F)\n",
      "0    2994.0  3.750437e+06      0.0           NaN        NaN       NaN\n",
      "1    2993.0  3.732809e+06      1.0  17627.473318  14.129318  0.000174\n",
      "2    2991.0  3.731516e+06      2.0   1293.696286   0.518482  0.595477\n"
     ]
    }
   ],
   "source": [
    "#model1\n",
    "X_transformed1 = dmatrix('cr(age,df=5) + education', data = {'age':data['age'],\n",
    "                                                                              'education':data['education']} ,\n",
    "                                                                            return_type = 'dataframe')\n",
    "fit1 = sm.OLS(data['wage'],X_transformed1).fit(disp = 0)\n",
    "\n",
    "#model2\n",
    "X_transformed2 = dmatrix('year + cr(age,df=5) + education', data = {'year':data['year'],'age':data['age'],\n",
    "                                                                              'education':data['education']} ,\n",
    "                                                                            return_type = 'dataframe')\n",
    "fit2 = sm.OLS(data['wage'],X_transformed2).fit(disp = 0)\n",
    "\n",
    "#model3\n",
    "X_transformed3 = dmatrix('cr(year,df = 4) + cr(age,df=5) + education', data = {'year':data['year'],'age':data['age'],\n",
    "                                                                              'education':data['education']} ,\n",
    "                                                                            return_type = 'dataframe')\n",
    "fit3 = sm.OLS(data['wage'],X_transformed3).fit(disp = 0)\n",
    "\n",
    "\n",
    "table = sm.stats.anova_lm(fit1,fit2,fit3)\n",
    "print(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# the first p value is small enough to conclude that model1 is not enough to explain the data, and model2 is better.\n",
    "# the second p value is not significant enough to say that model 3 is better than model2, \n",
    "# hence we conclude that model 2 is the best choice among the three"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Happy Learning :) , keep hustling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
